package cn.j229.bug.zhongxuan.hualian.controller;

import cn.j229.bug.zhongxuan.hualian.exception.BusinessException;
import cn.j229.bug.zhongxuan.hualian.utils.JsonResult;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

/**
 * 异常处理的总入口
 * @Author smile_ZhongXuan
 * @Date 2020/10/16 9:26
 * @Version 1.0
 */

@RestController
@ControllerAdvice
public class ExceptionController {
    @ExceptionHandler(Throwable.class)
    public Map handler(Exception e){
        JsonResult jsonResult = new JsonResult();
        // 当业务层抛出异常时，格式是：
        // throw new BusinessException("注册手机号重复")
        // 业务异常的处理规范
        if(e instanceof BusinessException){
            // 统一规范返回给前端的失败状态为0
            jsonResult.setCode("0");
            // 把异常中带的信息返回给前端
            jsonResult.setMsg(e.getMessage());
        }else{
            jsonResult.setCode("500");
            jsonResult.setMsg("系统开小差了，请稍后再试！");

            // springboot开发的程序，打成jar包，在服务器中运行
            // 挂起：nohup java -jar springboot.jar &

            // 把异常信息记录到nohup.out文件中
            SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
            System.out.println("——————————————————————————" + format.format(new Date()) + "——————————————————————————");
            // System.out.println(e.toString());   // 异常发生的类型和原因

            // 如果项目上线，可以不打印栈信息，否则会导致nohup.out文件很快变得很大

            // 开发过程中可以打印
            e.printStackTrace();
        }
        return jsonResult.getValues();
    }
}
